package com.dp1.pucp.Ventas.Controlador;

import CharliesCookies.MainController;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import com.dp1.pucp.Modelo.Clases.Cliente;
import com.dp1.pucp.Modelo.Clases.Distrito;
import com.dp1.pucp.Modelo.Clases.Provincia;
import com.dp1.pucp.Seguridad.DAO.LogDAO;
import com.dp1.pucp.Util.Validaciones;

import com.dp1.pucp.Ventas.DAO.*;
import com.dp1.pucp.Ventas.VIsta.*;

import java.util.ArrayList;

/**
 * @author Lucia
 */
public class ClienteControlador {

    private ClienteDAO dao;
    private ClienteGUI clienteGUI;
    private Cliente cliente;
    
    private MantClienteControlador controlador;

    public ClienteControlador(ClienteDAO dao, ClienteGUI view, Cliente cliente, MantClienteControlador controlador) {
        this.dao = dao;
        this.clienteGUI = view;
        this.cliente = cliente;
        this.controlador = controlador;
        
        clienteGUI.llenaComboTipo(this.dao.listarTipoCliente());
        clienteGUI.llenaComboDepartamento(this.dao.listarDepartamento());
        clienteGUI.llenaComboProvincia(this.dao.listarProvincia(clienteGUI.getDepartamento()));
        clienteGUI.llenaComboDistrito(this.dao.listarDistrito(clienteGUI.getProvincia()));
        clienteGUI.llenaComboEstado(this.dao.listarEstado());

        clienteGUI.addGuardarListener(new guardarClienteListener());
        clienteGUI.addLimpiarListener(new limpiarClienteListener());
        clienteGUI.addCancelarListener(new cancelarClienteListener());
        clienteGUI.addSeleccionDepartamentoListener(new seleccionDepartamentoListener());
        clienteGUI.addSeleccionProvinciaListener(new seleccionProvinciaListener());

        if (cliente != null) {
            clienteGUI.setTitle("Editar Cliente");
        } else {
            clienteGUI.setTitle("Agregar Cliente");
        }
        
        clienteGUI.setFormulario(cliente);

        if (cliente != null) {
            clienteGUI.setDepartamento(cliente.getDistrito().getProvincia().getDepartamento().getIddepartamento() - 1);

            int indiceProv = 0;
            ArrayList<Provincia> provincias = this.dao.listarProvincia(cliente.getDistrito().getProvincia().getDepartamento());
            clienteGUI.llenaComboProvincia(provincias);
            for (int i = 0; i < provincias.size(); i++) {
                if (provincias.get(i).getIdprovincia() == cliente.getDistrito().getProvincia().getIdprovincia()) {
                    indiceProv = i;
                    break;
                }
            }
            clienteGUI.setProvincia(indiceProv);

            int indiceDistrito = 0;
            ArrayList<Distrito> distritos = this.dao.listarDistrito(cliente.getDistrito().getProvincia());
            clienteGUI.llenaComboDistrito(distritos);
            for (int i = 0; i < distritos.size(); i++) {
                if (distritos.get(i).getIddistrito() == cliente.getDistrito().getIddistrito()) {
                    indiceDistrito = i;
                    break;
                }
            }
            clienteGUI.setDistrito(indiceDistrito);

        }
    }

    class guardarClienteListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean esnuevo = true;
            Cliente c = new Cliente();
            //c.setIdcliente(clienteGUI.cliente.getIdcliente()); //codigo ?''

            String ruc = clienteGUI.getRUC();
            boolean rucFlag = false;
            String razonSocial = clienteGUI.getRazonSocial();
            boolean razonSocialFlag = false;
            String paginaWeb = clienteGUI.getPaginaWeb();
            boolean paginaFlag = false;
            String telefono = clienteGUI.getTelefono();
            boolean telefonoFlag = false;
            String direccionFiscal = clienteGUI.getDireccion();
            boolean direccionFlag = false;
            int estado = clienteGUI.getEstado();
            boolean estadoFlag = false;

            if (ruc.length() != 11) {
                rucFlag = true;
            }
            if (ruc.equals("")) {
                rucFlag = true;
            }
            if (razonSocial.equals("")) {
                razonSocialFlag = true;
            }
            //if (paginaWeb.equals("")) paginaFlag=true;
            if (telefono.equals("")) {
                telefonoFlag = true;
            }
            if (direccionFiscal.equals("")) {
                direccionFlag = true;
            }
            if (estado == 0) {
                estadoFlag = true;
            }


            if (rucFlag || razonSocialFlag || paginaFlag || telefonoFlag || direccionFlag || estadoFlag) {
                Validaciones.mostrarMensajeErrorVal("Ingrese los campos correctamente");
                return;
            }

            c.setRazonsocial(razonSocial);
            c.setRuc(ruc);
            c.setPaginaweb(paginaWeb);
            c.setTelefono(telefono);
            c.setDireccionfiscal(direccionFiscal);

            c.setDistrito(clienteGUI.getDistrito());
            c.setEstado(clienteGUI.getEstado() - 1);
            c.setTipocliente(clienteGUI.getTipocliente());
            if (cliente != null) {
                c.setIdcliente(cliente.getIdcliente());
                esnuevo = false;
            }
            dao.guardarCliente(c);
            clienteGUI.dispose();
            
            controlador.listaCliente = controlador.dao.listarCliente(1);
            controlador.mantClienteView.llenaGrilla(controlador.listaCliente);
            
            
            if (esnuevo) {
                LogDAO.insertarLog(MainController.usuario, "Agregar Cliente");
            
                Validaciones.mostrarMensajeAvisoVal("El cliente ha sido creado correctamente.");
            } else {
                LogDAO.insertarLog(MainController.usuario, "Editar Cliente");
            
                Validaciones.mostrarMensajeAvisoVal("El cliente ha sido modificado correctamente.");
            }
        }
    }

    class limpiarClienteListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            clienteGUI.LimpiarDatos();
            clienteGUI.llenaComboDepartamento(dao.listarDepartamento());
            clienteGUI.llenaComboProvincia(dao.listarProvincia(clienteGUI.getDepartamento()));
            clienteGUI.llenaComboDistrito(dao.listarDistrito(clienteGUI.getProvincia()));

        }
    }

    class cancelarClienteListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            clienteGUI.dispose();
             if (cliente!=null)
                LogDAO.insertarLog(MainController.usuario, "Salir Editar Cliente");
            else
                LogDAO.insertarLog(MainController.usuario, "Salir Agregar Cliente");
        }
    }

    class seleccionDepartamentoListener implements ItemListener {

        @Override
        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange() == ItemEvent.SELECTED) {
                clienteGUI.llenaComboProvincia(dao.listarProvincia(clienteGUI.getDepartamento()));
                clienteGUI.llenaComboDistrito(dao.listarDistrito(clienteGUI.getProvincia()));
            }
        }
    }

    class seleccionProvinciaListener implements ItemListener {

        @Override
        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange() == ItemEvent.SELECTED) {

                clienteGUI.llenaComboDistrito(dao.listarDistrito(clienteGUI.getProvincia()));
            }
        }
    }
}
